/*     */ package com.zimbra.cs.util.http;
/*     */ 
/*     */ import javax.servlet.http.HttpServletRequest;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class ContentRange
/*     */ {
/*     */   public static final String HEADER = "Content-Range";
/*     */   private long start;
/*     */   private long end;
/*     */   private boolean startEndSet;
/*     */   private long instanceLength;
/*     */   private boolean lengthSet;
/*     */   
/*     */   public ContentRange(long start, long end)
/*     */     throws RangeException
/*     */   {
/*  48 */     setStartAndEnd(start, end);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public ContentRange(long start, long end, long instanceLength)
/*     */     throws RangeException
/*     */   {
/*  61 */     setStartAndEnd(start, end);
/*  62 */     setInstanceLength(instanceLength);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public ContentRange(long instanceLength)
/*     */     throws RangeException
/*     */   {
/*  73 */     setInstanceLength(instanceLength);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public ContentRange() {}
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public boolean hasStartEnd()
/*     */   {
/*  94 */     return this.startEndSet;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long getStart()
/*     */   {
/* 105 */     return this.start;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long getEnd()
/*     */   {
/* 115 */     return this.end;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public boolean hasInstanceLength()
/*     */   {
/* 125 */     return this.lengthSet;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long getInstanceLength()
/*     */   {
/* 136 */     return this.instanceLength;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public long getRangeLength()
/*     */   {
/* 146 */     return this.end - this.start + 1L;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public boolean isComplete()
/*     */   {
/* 157 */     return (hasInstanceLength()) && (this.start == 0L) && (this.end + 1L == this.instanceLength);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static ContentRange parse(HttpServletRequest req)
/*     */     throws RangeException
/*     */   {
/* 171 */     return parse(req.getHeader("Content-Range"));
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static ContentRange parse(String header)
/*     */     throws RangeException
/*     */   {
/* 185 */     if (header == null) {
/* 186 */       return null;
/*     */     }
/*     */     
/* 189 */     header = header.trim();
/*     */     
/* 191 */     if (!header.startsWith("bytes")) {
/* 192 */       throw new RangeException(400);
/*     */     }
/*     */     
/* 195 */     header = header.substring(6).trim();
/*     */     
/* 197 */     int slashPos = header.indexOf('/');
/*     */     
/* 199 */     if (slashPos == -1) {
/* 200 */       throw new RangeException(400);
/*     */     }
/*     */     
/* 203 */     ContentRange range = new ContentRange();
/*     */     try
/*     */     {
/* 206 */       int dashPos = header.indexOf('-');
/*     */       
/* 208 */       if (dashPos == -1) {
/* 209 */         if (header.charAt(0) != '*') {
/* 210 */           throw new RangeException(400);
/*     */         }
/*     */       } else {
/* 213 */         long start = Long.parseLong(header.substring(0, dashPos).trim());
/* 214 */         long end = Long.parseLong(header.substring(dashPos + 1, slashPos).trim());
/*     */         
/* 216 */         range.setStartAndEnd(start, end);
/*     */       }
/*     */       
/* 219 */       String instanceLengthStr = header.substring(slashPos + 1, header.length()).trim();
/*     */       
/* 221 */       if (!instanceLengthStr.equals("*")) {
/* 222 */         range.setInstanceLength(Long.parseLong(instanceLengthStr));
/*     */       }
/*     */     }
/*     */     catch (NumberFormatException e) {
/* 226 */       throw new RangeException(400);
/*     */     }
/*     */     
/* 229 */     return range;
/*     */   }
/*     */   
/*     */   private void setInstanceLength(long value) throws RangeException
/*     */   {
/* 234 */     if ((value < 0L) || ((this.startEndSet) && (this.end >= value))) {
/* 235 */       throw new RangeException(400);
/*     */     }
/*     */     
/* 238 */     this.instanceLength = value;
/* 239 */     this.lengthSet = true;
/*     */   }
/*     */   
/*     */   private void setStartAndEnd(long start, long end)
/*     */     throws RangeException
/*     */   {
/* 245 */     if ((start < 0L) || (end < start)) {
/* 246 */       throw new RangeException(400);
/*     */     }
/* 248 */     this.start = start;
/* 249 */     this.end = end;
/* 250 */     this.startEndSet = true;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public String toString()
/*     */   {
/* 260 */     String result = "bytes ";
/*     */     
/* 262 */     if (this.startEndSet) {
/* 263 */       result = result + this.start + "-" + this.end;
/*     */     } else {
/* 265 */       result = result + "*";
/*     */     }
/*     */     
/* 268 */     if (this.lengthSet) {
/* 269 */       result = result + "/" + this.instanceLength;
/*     */     } else {
/* 271 */       result = result + "/*";
/*     */     }
/*     */     
/* 274 */     return result;
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/util/http/ContentRange.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */